home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / Error.C < prev    next >
C/C++ Source or Header  |  1990-12-06  |  2KB  |  119 lines

  1. #include <stdio.h>
  2.  
  3. #include "Error.h"
  4. #include "String.h"
  5. #include "System.h"
  6.  
  7. int gDebug= 0;
  8.  
  9. void AbstractMethod(char *s)
  10. {
  11.     Warning(s, "abstract method called");
  12. }
  13.  
  14. static int abortlevel= cSysError;
  15. static int ignorelevel= cError;
  16.  
  17. void DefaultErrorHandler(int level, bool abort, char *location, char *msg)
  18. {
  19.     char *type= "Warning";
  20.     if (level < ignorelevel)
  21.     return;
  22.     if (level >= cFatal)
  23.     type= "Fatal";
  24.     else if (level >= cSysError)
  25.     type= "SysError";
  26.     else if (level >= cError)
  27.     type= "Error";
  28.       
  29.     fprintf (stderr, "%s in <%s>: %s\n", type, location, msg);
  30.     fflush (stderr);
  31.     if (abort) {
  32.     fprintf (stderr, "aborting\n");
  33.     fflush (stderr);
  34.     Abort();
  35.     }
  36. }
  37.  
  38. static ErrorHandlerFunc errorhandler= DefaultErrorHandler;
  39.  
  40. void ErrorHandler(int level, char *location, char *fmt, va_list ap)
  41. {
  42.     char buf[1024], *bp;
  43.     
  44.     vsprintf(buf, fmt, ap);
  45.     if (level >= cSysError && level < cFatal)
  46.     bp= form("%s (%s)", buf, gSystem->GetError());
  47.     else
  48.     bp= buf;
  49.     errorhandler(level, level >= abortlevel, location, bp);
  50. }
  51.  
  52. void Error(char *location, char *va_(fmt), ...)
  53. {
  54.     va_list ap;
  55.     va_start(ap,va_(fmt));
  56.     ErrorHandler(cError, location, va_(fmt), ap);
  57.     va_end(ap);
  58. }
  59.  
  60. void SysError(char *location,  char *va_(fmt), ...)
  61. {
  62.     va_list ap;
  63.     va_start(ap, va_(fmt));
  64.     ErrorHandler(cSysError, location, va_(fmt), ap);
  65.     va_end(ap);
  66. }
  67.  
  68. void Warning(char *location, char *va_(fmt), ...)
  69. {
  70.     va_list ap;
  71.     va_start(ap,va_(fmt));
  72.     ErrorHandler(cWarning, location, va_(fmt), ap);
  73.     va_end(ap);
  74. }
  75.  
  76. void Fatal(char *location, char *va_(fmt), ...)
  77. {
  78.     va_list ap;
  79.     va_start(ap,va_(fmt));
  80.     ErrorHandler(cFatal, location, va_(fmt), ap);
  81.     va_end(ap);
  82. }
  83.  
  84. ErrorHandlerFunc SetErrorHandler(ErrorHandlerFunc newhandler)
  85. {
  86.     ErrorHandlerFunc oldhandler= errorhandler;
  87.     errorhandler= newhandler;
  88.     return oldhandler;
  89. }
  90.  
  91. ErrorHandlerFunc GetErrorHandler()
  92. {
  93.     return errorhandler;
  94. }
  95.  
  96. int SetAbortLevel(int newlevel)
  97. {
  98.     int oldlevel= abortlevel;
  99.     abortlevel= newlevel;
  100.     return oldlevel;
  101. }
  102.  
  103. int GetAbortLevel()
  104. {
  105.     return abortlevel;
  106. }
  107.  
  108. int SetIgnoreLevel(int newlevel)
  109. {
  110.     int oldlevel= abortlevel;
  111.     ignorelevel= newlevel;
  112.     return oldlevel;
  113. }
  114.  
  115. int GetIgnoreLevel()
  116. {
  117.     return ignorelevel; 
  118. }
  119.